import os
import random
from datetime import datetime, timedelta
from django.utils import timezone
from faker import Faker

import violation

# 初始化Django环境（需根据你的项目结构调整）
# 假设你的Django项目根目录在当前脚本的父级目录
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "boss_backend.settings")  # 替换为你的项目settings路径
import django

django.setup()

# 导入你的模型（替换为实际的模型路径）
from violation.models import Violation, JobAuditRecord

# 初始化Faker生成中文数据
fake = Faker("zh_CN")

# 违规词类型映射（对应模型中的WORD_TYPE_CHOICES）
WORD_TYPES = [1, 2, 3, 4, 5]  # 1=虚假招聘，2=涉政敏感，3=色情低俗，4=暴力违法，5=广告引流
WORD_TYPE_NAMES = {t[0]: t[1] for t in Violation.WORD_TYPE_CHOICES}

def insert_illegal_words(count=1000):
    # 基础违规词库（确保不重复）
    base_words = [
        # 虚假招聘类
        "高薪日结", "无需经验", "日赚500", "刷单兼职", "在家赚钱",
        # 涉政敏感类
        "敏感政治词1", "敏感政治词2", "敏感政治词3",
        # 色情低俗类
        "低俗词1", "低俗词2", "色情相关词",
        # 暴力违法类
        "暴力词1", "吸毒", "赌博", "违法交易",
        # 广告引流类
        "扫码进群", "微商代理", "点击链接", "加微信"
    ]
    # 用集合确保基础词库本身无重复
    base_words = list(set(base_words))
    used_words = set()  # 记录已使用的违规词，避免重复
    bulk_data = []

    for i in range(count):
        # 循环生成不重复的词
        while True:
            # 70%概率从基础词库选，30%概率随机生成新词
            if random.random() < 0.7 and base_words:
                word = random.choice(base_words)
                # 随机添加变体（避免重复）
                if random.random() < 0.5:
                    word += str(random.randint(0, 99))  # 加两位数字，降低重复概率
            else:
                # 生成2-6字的随机中文词（用fake.word()确保唯一性）
                word = "".join(fake.words(nb=random.randint(2, 6)))

            # 检查是否已使用，未使用则跳出循环
            if word not in used_words:
                used_words.add(word)
                break

        # 随机选择违规类型和状态
        word_type = random.choice(WORD_TYPES)
        status = 1 if random.random() < 0.9 else 0  # 90%启用，10%禁用
        create_time = timezone.now() - timedelta(days=random.randint(0, 365))
        update_time = timezone.now() - timedelta(days=random.randint(0, 365))

        bulk_data.append(
            Violation(
                word=word,
                word_type=word_type,
                status=status,
                create_time=create_time,
                update_time=update_time
            )
        )

    # 批量插入
    Violation.objects.bulk_create(bulk_data)
    print(f"成功插入 {count} 条不重复的违规词数据")


def insert_audit_records(count=50):
    # 获取已存在的违规词（用于关联）
    illegal_words = list(Violation.objects.filter(status=1).values_list("id", "word", "word_type"))
    if not illegal_words:
        print("请先插入违规词数据！")
        return

    bulk_data = []
    for i in range(count):
        # 生成职位信息
        job_id = 10000 + i  # 职位ID从10000开始
        company_id = 20000 + random.randint(1, 50)  # 随机企业ID
        job_title = fake.sentence(nb_words=5)  # 随机职位标题（5个词）
        job_description = fake.paragraph(nb_sentences=3)  # 随机职位描述（3句话）

        # 拼接审核内容（模拟真实场景：标题+描述）
        audit_content = f"{job_title} {job_description}".replace("\n", "").replace(" ", "")

        # 随机命中违规词（30%概率命中1-3个违规词）
        hit_illegal = random.random() < 0.3
        if hit_illegal:
            # 随机选择1-3个违规词
            hit_count = random.randint(1, 3)
            selected_words = random.sample(illegal_words, hit_count)
            illegal_words_str = ",".join([w[0] for w in selected_words])
            word_types_str = ",".join([WORD_TYPE_NAMES[w[1]] for w in selected_words])
            audit_result = 2  # 违规
        else:
            illegal_words_str = None
            word_types_str = None
            audit_result = 1  # 合规

        # 生成审核时间（近7天内）
        audit_time = timezone.now() - timedelta(hours=random.randint(0, 7 * 24))
        # 随机IP地址
        audit_ip = fake.ipv4()

        # 添加到批量插入列表
        bulk_data.append(
            JobAuditRecord(
                job_id=job_id,
                company_id=company_id,
                job_title=job_title,
                job_description=job_description,
                audit_content=audit_content,
                illegal_words=illegal_words_str,
                word_types=word_types_str,
                audit_result=audit_result,
                audit_time=audit_time,
                audit_ip=audit_ip
            )
        )

        # 批量插入
    JobAuditRecord.objects.bulk_create(bulk_data)
    print(f"成功插入 {count} 条审核记录数据")


if __name__ == "__main__":
    # insert_illegal_words(1000)  # 先插入不重复的违规词
    insert_audit_records(50)  # 再插入审核记录